home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / games / texturemapping / make64k.c < prev    next >
C/C++ Source or Header  |  1980-01-03  |  2KB  |  110 lines

  1. #include <exec/types.h>
  2. #include <clib/exec_protos.h>
  3. #include <graphics/view.h>
  4. #include <stdio.h>
  5. #include <dos/dos.h>
  6. #include <math.h>
  7. #define NO_PRAGMAS 1
  8. #include "iff.h"
  9.  
  10. #pragma libcall IFFBase OpenIFF 1e 801
  11. #pragma libcall IFFBase CloseIFF 24 901
  12. #pragma libcall IFFBase FindChunk 2a 902
  13. #pragma libcall IFFBase GetBMHD 30 901
  14. #pragma libcall IFFBase GetColorTab 36 8902
  15. #pragma libcall IFFBase DecodePic 3c 8902
  16. #pragma libcall IFFBase SaveBitMap 42 a9804
  17. /*#pragma libcall IFFBase SaveClip 48 210a9808*/
  18. #pragma libcall IFFBase IFFError 4e 0
  19. #pragma libcall IFFBase GetViewModes 54 901
  20. #pragma libcall IFFBase NewOpenIFF 5a 802
  21. #pragma libcall IFFBase ModifyFrame 60 8902
  22.  
  23. struct Library *IFFBase,*GfxBase;
  24. ULONG *infile;
  25.  
  26. void Fail(char *msg)
  27. {
  28.     if (msg) printf("%s\n",msg);
  29.     if (infile) CloseIFF(infile);
  30.     if (IFFBase) CloseLibrary(IFFBase);
  31.     exit(0);
  32. }
  33.  
  34.  
  35. struct Library *openlib(char *name,ULONG version)
  36. {
  37.     struct Library *t1;
  38.     t1=OpenLibrary(name,version);
  39.     if (! t1)
  40.     {
  41.         printf("error- needs %s version %d\n",name,version);
  42.         Fail(0l);
  43.     }
  44.     else return(t1);
  45. }
  46.  
  47.  
  48.  
  49. int curout=0;
  50.  
  51. outb(c)
  52. {
  53.     if (! curout) printf("\n\tdc.b\t"); else printf(",");
  54.     printf("$%02x",c);
  55.     curout++;
  56.     if (curout==15) curout=0;
  57. }
  58.  
  59. struct Colormap *mycm;
  60.  
  61. ULONG r[256],g[256],b[256];
  62.  
  63. #define AVG(x,y) (((x/2)+(y/2)))
  64.  
  65. main(argc,argv)
  66. int argc;
  67. char **argv;
  68. {
  69.     IFFBase=openlib("iff.library",0);
  70.     GfxBase=openlib("graphics.library",39);
  71.     if (argc==2)
  72.     {
  73.  
  74.         if (infile=OpenIFF(argv[1]))
  75.         {
  76.             ULONG *form,*chunk;
  77.             ULONG count;
  78.             UBYTE *ptr;
  79.             ULONG i;
  80.             mycm=GetColorMap(256l);
  81.             chunk=FindChunk(infile,ID_CMAP);
  82.             if (! chunk) Fail("no color table");
  83.             chunk++;
  84.             count=(*(chunk++))/3;
  85.             ptr=chunk;
  86.             if (count>256) count=256;
  87.             for(i=0;i<count;i++)
  88.             {
  89.                 r[i]=*(ptr++)<<24;
  90.                 g[i]=*(ptr++)<<24;
  91.                 b[i]=*(ptr++)<<24;
  92.                 SetRGB32CM(mycm,i,r[i],g[i],b[i]);
  93.             }
  94.  
  95.             printf("; mix table for palette\n");
  96.             for(i=0;i<65536;i++)
  97.             {
  98.                 int found;
  99.                 int x=(i>>8);
  100.                 int y=(i & 0xff);
  101.                 found=FindColor(mycm,AVG(r[x],r[y]),AVG(g[x],g[y]),AVG(b[x],b[y]),255);
  102.                 if (found==x) found=y;
  103.                 outb(found);
  104.             }
  105.  
  106.             Fail(0);
  107.         }
  108.     } else Fail("can't open file");
  109. }
  110.